package com.clover.coder;

import com.clover.coder.core.Conf;
import com.clover.coder.core.Creater;
import com.clover.coder.utils.Tools;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class CodeCreater extends Creater {

	/**
	 * 代码手动生成到本地
	 * 说明：
	 * 1、tablesMap 中 key 为表名，value 为表前缀，添加后生成的文件名中自动替换掉，比如：表名是 sys_role，最终生成的文件为 Role.java、RoleVo.java ，否则是 SysRole.java
	 * 2、生成代码默认会删除输出路径所有文件，请勿直接将输出路径改为项目路径下
	 * @Auther: masl 2017年5月20日上午11:19:25
	 */
	public static void main(String[] arg) {
		//说明 
		Map<String, String> tablesMap = new HashMap<>();
		tablesMap.put("sys_region", "");

		CodeCreater codeCreater = new CodeCreater();
		codeCreater.conf = new Conf().setOutPath("C:/Users/masl/Desktop/code/")// 代码生成文件夹路径
				.setBasePackageName("com.msl")// 顶级包名
				.setSubPackageName("sys")// 子包名
				.setCompany("msl")// 公司
				.setAuthor("masl")// 当前操作人
				.setTempleteDirName("cloverCode")// 模板文件夹名称

				// -----------数据库相关设置-----------
				.setDbDriver("com.mysql.jdbc.Driver").setDbUrl("jdbc:mysql://127.0.0.1:3306/ssm-web")
				.setDbUserNa("root").setDbPwd("123456");

				codeCreater.work(tablesMap);
	}

	/**
	 * 生成代码
	 * @Auther: masl 2017年5月20日上午10:07:25
	 * @param tableName
	 * @param tbPrefix：表前缀（有值的话可以自动去除表名的前缀）
	 * @param fieldList
	 */
	@Override
	public void createCodeDetail(String tableName, String pKey, String tbPrefix, List<String[]> fieldList) throws Exception {
		String className = Tools.bigHump(tableName);
		if (Tools.isNotEmpty(tbPrefix)) {
			className = Tools.bigHump(tableName.substring(tbPrefix.length()));
		}
		String subPackageName = this.conf.getSubPackageName();
		setParaMap(fieldList, tableName, pKey, className);

		String basePath = this.conf.getBasePackageName().replace(".", "/") + "/";

		/* 生成model */
		markFile("modelTemplate.ftl", paraMap, basePath + "model/" + subPackageName + "/" + className + ".java");

		/* 生成vo */
		markFile("voTemplate.ftl", paraMap, basePath + "vo/" + subPackageName + "/" + className + "Vo.java");

		/* 生成mybatis xml */
		markFile("mapperMysqlTemplate.ftl", paraMap, "mapper/" + subPackageName + "/" + className + "Mapper.xml");

		/* 生成daoImpl */
		markFile("mapperTemplate.ftl", paraMap, basePath + "mapper/" + subPackageName + "/" + className + "Mapper.java");

		/* 生成service */
		markFile("serviceTemplate.ftl", paraMap, basePath + "service/" + subPackageName + "/" + className + "Service.java");

		/* 生成controller */
		markFile("controllerTemplate.ftl", paraMap, basePath + "controller/" + subPackageName + "/" + className + "Ctl.java");

		/* 生成SQL脚本 */
		//printFile("mysql_SQL_Template.ftl", paraMap, "mysql数据库脚本/" + className.toUpperCase() + ".sql");

		/* 生成jsp页面 */
		markFile("jsp_list_Template.ftl", paraMap, "jsp/" + Tools.littleHump(className) + "/index.jsp");
		markFile("jsp_form_Template.ftl", paraMap, "jsp/" + Tools.littleHump(className) + "/edit.jsp");

		/* 生成说明文档 */
		//printFile("docTemplate.ftl", paraMap, "说明.doc");
	}
}
